<?php

class DatabaseObject_Persorder extends DatabaseObject {

    public $shop = null;
    public $user = null;

    public function __construct($db) {
        parent::__construct($db, 'persorder', 'id');

        // далее перечислены все поля таблицы

        $this->add('of');
        $this->add('shopId');
        $this->add('content');
    }

    public static function GetRequest($db, $options = array()) {
        // инициализируем настройки
        $defaults = array(
            'where' => '',
            'offset' => 0,
            'limit' => 0,
            'order' => 'r.id'
        );

        foreach ($defaults as $k => $v) {
            $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
        }

        $select = self::_GetBaseQuery($db, $options);

        // поля для выборки
        $select->from(null, 'r.*');

        // зададим настройки
        if ($options['limit'] > 0)
            $select->limit($options['limit'], $options['offset']);
        if ($options['where'])
            $select->where($options['where']);

        $select->order($options['order']);

        // получим данные из базы
        $data = $db->fetchAll($select);

        // сделаем из полученных записей объекты класса
        $cats = self::BuildMultiple($db, __CLASS__, $data);
        $cat_ids = array_keys($cats);

        foreach ($cats as $key => $value) {
            $user = new DatabaseObject_User($db);
            $shop = new DatabaseObject_User($db);

            $user->load($value->of);
            $shop->load($value->shopId);

            $value->user = $user;
            $value->shop = $shop;
        }
        if (count($cat_ids) == 0)
            return array();

        return $cats;
    }

    private static function _GetBaseQuery($db, $options) {
        // инициализация настроек
        $defaults = array();

        foreach ($defaults as $k => $v) {
            $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
        }

        // создание запроса на получение
        $select = $db->select();
        $select->from(array('r' => 'persorder'), array());

        return $select;
    }

    public static function GetCount($db) {
        $select = self::_GetBaseQuery($db, array());
        $select->from(null, 'count(*)');

        return $db->fetchOne($select);
    }

    // количество заказов магазину
    public static function GetShopCount($db, $shopId) {
        $select = self::_GetBaseQuery($db, array());
        $select->from(null, 'count(*)');
        $select->where('shopId = ?', $shopId);
        return $db->fetchOne($select);
    }

    // количесвто заказов пользователя
    public static function GetUserCount($db, $userId) {
        $select = self::_GetBaseQuery($db, array());
        $select->from(null, 'count(*)');
        $select->where('of = ?', $userId);
        return $db->fetchOne($select);
    }

    //заказы магазину
    public function GetShop($db, $userId) {
        $select = self::_GetBaseQuery($db, array());
        $select->from(null, 'r.*');
        $select->where('shopId = ?', $userId);
        return $db->fetchAll($select);
    }

    // заказы пользователя
    public function GetUser($db, $userId) {
        $select = self::_GetBaseQuery($db, array());
        $select->from(null, 'r.*');
        $select->where('of = ?', $userId);
        return $db->fetchAll($select);
    }

}
